from django.shortcuts import render
from django.contrib.auth.models import User

from rest_framework.views import APIView
from rest_framework.response import Response
import requests
import json


# backend/weixin/views.py

...
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.permissions import IsAuthenticated


# 获取用户数据
class UserData(APIView):
    """
    get:
    将当前用户的清单数据 items 返回的接口
    #### 请求格式
        - json

    #### 请求参数
    | 字段名 | 含义  | 类型  | 是否必填  |  示例  |
    |:------:|:------:|:------:|:------:|:------:|
    | Authorization | 请求Token|  string |是 | "" |

    #### 返回参数
    | 字段名 | 含义  | 类型   |  示例  |
    |:------:|:------:|:------:|:------:|
    | code | 状态码  |  string | "get ok" |
    | items | 用户数据  |  array | [] |

    #### 返回格式
        -json

    #### 返回示例
        - {'code': 'get ok', 'items': []}

    post:
    将用户上传的数据更新到数据库的接口
    #### 请求格式
        - json

    #### 请求参数
    | 字段名 | 含义  | 类型  | 是否必填  |  示例  |
    |:------:|:------:|:------:|:------:|:------:|
    | Authorization | 请求Token|  string |是 | Bearer... |
    | items | 用户数据  |  array | 是| [] |

    #### 返回参数
    | 字段名 | 含义  | 类型  |  示例  |
    |:------:|:------:|:------:|:------:|
    | code | 状态码 |  string | "post ok" |

    #### 返回格式
        -json

    #### 返回示例
        - {'code': 'post ok'})
    """
    permission_classes = [IsAuthenticated]

    def get(self, request, format=None):
        print('Get data: ', request.user.profile.items)
        return Response({'code': 'get ok', 'items': request.user.profile.items['items']})


    def post(self, request, format=None):
        user = request.user
        user.profile.items = request.data
        user.save()
        print('Post data: ', user.profile.items)
        return Response({'code': 'post ok'})


class WeixinLogin(APIView):
    def post(self, request, format=None):
        """
        用户登录的接口

        #### 请求格式
            - json

        #### 请求参数
        | 字段名| 含义  | 类型   | 是否必填   |  示例  |
        |:------:|:------:|:------:|:------:|:------:|
        | code |  临时登录凭证 |  string |是 |"033oA8lG06MSAg2MYViG0s6dlG0oA8lI" |

        #### 返回参数
        | 字段名| 含义  | 类型   |  示例  |
        |:------:|:------:|:------:|:------:|
        | code | 状态码    |  string | "success"/"fail"|
        | access | Token  |  string |"" |
        | refresh | Token更新  |  string | ""|

        #### 返回格式
            -json

        #### 返回示例
            - {code: "success",access: "",refresh: ""}
            - {"code": "fail"}}
        """
        # 从请求中获得code
        code = json.loads(request.body).get('code')

        # 填写你的测试号密钥
        appid = 'wx54b36cd435e55853'
        appsecret = 'ef5935295a93b43cb9bb36fb1492505d'

        # 微信接口服务地址
        base_url = 'https://api.weixin.qq.com/sns/jscode2session'
        # 微信接口服务的带参数的地址
        url = base_url + "?appid=" + appid + "&secret=" + appsecret + "&js_code=" + code + "&grant_type=authorization_code"
        response = requests.get(url)

        # 处理获取的 openid
        try:
            openid = response.json()['openid']
            session_key = response.json()['session_key']
        except KeyError:
            return Response({'code': 'fail'})
        else:
            # 打印到后端命令行
            print(openid, session_key)
            # 根据openid确定用户的本地身份
            try:
                user = User.objects.get(username=openid)
            except User.DoesNotExist:
                user = None

            if user:
                user = User.objects.get(username=openid)
            else:
                user = User.objects.create(
                    username=openid,
                    password=openid
                )
            refresh = RefreshToken.for_user(user)

            return Response({
                'code': 'success',
                'refresh': str(refresh),
                'access': str(refresh.access_token)
            })

class JiTang(APIView):
    """
        用户请求“鸡汤”的接口

        #### 请求格式
            - json

        #### 请求参数
        | 字段名| 含义  | 类型   | 是否必填   |  示例  |
        |:------:|:------:|:------:|:------:|:------:|
        | choice | 鸡汤类型  |  string |是 |毒鸡汤："du",:好鸡汤："hao" |

        #### 返回参数
        | 字段名| 含义  | 类型   |  示例  |
        |:------:|:------:|:------:|:------:|
        | code | 状态码    |  string | "success"/"fail"|
        | data | 数据  |  dict | "data":{"content":"","author":""}|

        #### 返回格式
            -json

        #### 返回示例
            - {"code": "success", "data":{"content":"","author":""}}
            - {"code": "fail"}}
        """
    permission_classes = [IsAuthenticated]

    def post(self, request, format=None):

        print(request.body)
        choice = json.loads(request.body).get('choice')
        result = {}
        code = 0
        if choice == 'hao':
            app_id = 'd18kqkkirzfnjfhv'
            app_secret = 'TmhRZGpxNnJSTUdwYXVnVW5mc3NtUT09'
            url = 'https://www.mxnzp.com/api/daily_word/recommend?'
            url = url + 'app_id=' + app_id
            url = url + '&app_secret=' + app_secret
            print(url)
            r = requests.get(url)
            r_dict = r.json()
            print(r_dict)
            if r_dict['code'] == 1:
                code = 1
                result['content'] = r_dict['data'][0]['content']
                result['author'] = r_dict['data'][0]['author']
                if not result['author']:
                    result['author'] = '无名氏'
            else:
                code = 0

        elif choice == 'du':
            url = 'https://api.wer.plus/api/djt'
            r = requests.get(url)
            r_dict = r.json()
            if r_dict['code'] == 200:
                code = 1
                result['content'] = r_dict['data']['comment']
                result['author'] = '无名氏'
        else:
            code = 0

        if code:
            return Response({
                'code': 'success',
                'data': result
            })
        else:
            return Response({
                'code': 'fail'
            })



